package com.aau.edu.design.singleton;

/**
 * 单例模式：确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例，这个类称为单例类，他提供全局访问的方法
 * 单例模式的三个要点：
 *  1.某个类只有一个实例
 *  2.必须自行创建这个实例
 *  3.必须自行向整个系统提供这个实例
 * 实现的细节：
 *  ①私有构造函数
 *  ②静态私有成员变量（自身类型）
 *  ③静态共有的工厂方法
 *  懒汉式和饿汉式单例的比较
 *      1、饿汉式单例类：无需考虑多个线程同时访问的问题；调用速度和反映时间优于懒汉式单例；系统加载时间可能比较长
 *      2、懒汉式单例类：实现了延迟加载；必须处理好多个线程同时访问的问题；需要通过双重判定锁定等机制进行控制，将导致系统的性能降低。
 *
 */
public class SingletonTest {
    public static void main(String[] args) {
        LazySingleton instance1 = LazySingleton.getInstance();
        LazySingleton instance2 = LazySingleton.getInstance();
        System.out.println(instance1 == instance2);
        EagerSingleton instance3 = EagerSingleton.getInstance();
        EagerSingleton instance4 = EagerSingleton.getInstance();
        System.out.println(instance3 == instance4);

    }
}
